home *** CD-ROM | disk | FTP | other *** search
- unit uNewMessage;
-
- {
- *******************************************************************************
- * Descriptions: Incoming Message Pop-up Implementation
- * $Source: /cvsroot/fma/fma/uNewMessage.pas,v $
- * $Locker: $
- *
- * Todo:
- *
- * Change Log:
- * $Log: uNewMessage.pas,v $
- * Revision 1.16 2004/07/07 11:21:40 z_stoichev
- * Fixed minimum message height.
- * Personalization always used.
- *
- * Revision 1.15 2004/07/06 14:43:17 z_stoichev
- * - Added Personalization default contact image.
- * - Added Open Chat menu command
- *
- * Revision 1.14 2004/06/29 12:37:07 z_stoichev
- * New message window renamed
- *
- * Revision 1.13 2004/06/29 10:46:34 z_stoichev
- * Updated personalization
- *
- * Revision 1.12 2004/06/28 22:43:04 z_stoichev
- * Personalization support added.
- *
- * Revision 1.11 2004/06/23 13:49:27 z_stoichev
- * Fixed Delete from Archive
- *
- * Revision 1.10 2004/06/21 09:45:28 z_stoichev
- * Fixed Rply focus issue.
- * Popup menu changed.
- *
- * Revision 1.9 2004/04/01 15:06:21 z_stoichev
- * Mark as read on reply/forward
- * popup menu moved
- *
- * Revision 1.8 2004/01/12 15:36:05 z_stoichev
- * Fixed too small width issue.
- *
- * Revision 1.7 2003/11/28 09:38:07 z_stoichev
- * Merged with branch-release-1-1 (Fma 0.10.28c)
- *
- * Revision 1.6.2.4 2003/11/21 14:00:23 z_stoichev
- * Message fade out stopped on mouse over text or when
- * window is activated.
- * Actions as delete, reply, etc. moved into Popup menu.
- * Added Add contact action for unknown senders.
- * Window shows inactivated in order do not steal focus.
- *
- * Revision 1.6.2.3 2003/11/11 18:09:22 z_stoichev
- * Add background.
- * Auto form resize.
- * Add some buttons.
- *
- * Revision 1.6.2.2 2003/11/10 14:03:09 z_stoichev
- * RC3
- *
- * Revision 1.6.2.1 2003/10/27 07:22:54 z_stoichev
- * Build 0.1.0 RC1 Initial Checkin.
- *
- * Revision 1.6 2003/10/14 09:23:47 z_stoichev
- * Unit SentSMS renamed to uComposeSMS.
- *
- * Revision 1.5 2003/10/14 09:14:44 z_stoichev
- * Method Create renamed to CreateMsg in order
- * to avoid hiding of virtual inherited method.
- *
- * Revision 1.4 2003/01/30 04:15:57 warren00
- * Updated with header comments
- *
- *
- *******************************************************************************
- }
-
- interface
-
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls, Placemnt, ExtCtrls, TntStdCtrls, jpeg, Menus,
- GR32_Image;
-
- type
- TfrmNewMessage = class(TForm)
- FormPlacement1: TFormPlacement;
- Timer1: TTimer;
- lbText: TTntLabel;
- lbAlpha: TTntLabel;
- Image1: TImage;
- OkButton: TButton;
- ActionButton: TTntButton;
- PopupMenu1: TPopupMenu;
- Reply1: TMenuItem;
- Forward1: TMenuItem;
- N1: TMenuItem;
- Delete1: TMenuItem;
- N2: TMenuItem;
- AddContact1: TMenuItem;
- ImagePanel: TPanel;
- Image32: TImage32;
- Chat1: TMenuItem;
- procedure Timer1Timer(Sender: TObject);
- procedure FormClose(Sender: TObject; var Action: TCloseAction);
- procedure Reply1Click(Sender: TObject);
- procedure FormCreate(Sender: TObject);
- procedure OkButtonClick(Sender: TObject);
- procedure ActionButtonClick(Sender: TObject);
- procedure Forward1Click(Sender: TObject);
- procedure PopupMenu1Popup(Sender: TObject);
- procedure Delete1Click(Sender: TObject);
- procedure OnMouseEnter(Sender: TObject);
- procedure OnMouseLeave(Sender: TObject);
- procedure FormDeactivate(Sender: TObject);
- procedure AddContact1Click(Sender: TObject);
- procedure Chat1Click(Sender: TObject);
- procedure FormShow(Sender: TObject);
- private
- { Private declarations }
- FAlphaCount: integer;
- FPrevAlpha: boolean;
- FPersonalized: Boolean;
- FCustomImage: Boolean;
- procedure DoPersonalize;
- procedure DoMarkMsgAsRead;
- procedure Set_CustomImage(const Value: Boolean);
- public
- { Public declarations }
- msgInInbox: boolean;
- msgLocation,msgPdu: String;
- msgIndex: Integer;
- constructor CreateMsg(Sender, text: WideString; AlphaBlend: Integer);
- property IsPersonalized: Boolean read FPersonalized;
- property IsCustomImage: Boolean read FCustomImage write Set_CustomImage;
- end;
-
- var
- frmNewMessage: TfrmNewMessage;
-
- implementation
-
- uses Unit1, uComposeSMS, uSyncPhonebook, uMissedCalls, uChatSMS, gsm_sms;
-
- {$R *.dfm}
-
- const
- DontFadeSeconds = 5;
-
- constructor TfrmNewMessage.CreateMsg(Sender, text: WideString; AlphaBlend: Integer);
- var
- wide,high: integer;
- begin
- inherited Create(nil);
- msgLocation := '';
- msgPdu := '';
- msgIndex := -1;
- msgInInbox := True;
- { Prepare fade out }
- AlphaBlendValue := AlphaBlend;
- FAlphaCount := AlphaBlend + DontFadeSeconds*10; // dont fade immediately
- lbAlpha.Alignment := taLeftJustify;
- lbAlpha.AutoSize := True;
- lbAlpha.Caption := Sender;
- lbText.Anchors := [akLeft,akTop];
- lbText.Caption := '';
- { Restore form position }
- FormPlacement1.RestoreFormPlacement;
- Application.ProcessMessages;
- Constraints.MinHeight := 32;
- ClientHeight := 137;
- { Resize form to fit message }
- lbText.WordWrap := False;
- lbText.AutoSize := True;
- lbText.Caption := text;
- lbText.WordWrap := True;
- wide := lbText.Width;
- if lbAlpha.Width > wide then wide := lbAlpha.Width;
- wide := wide + lbAlpha.Left - 4;
- if wide > (Constraints.MaxWidth-16) then begin
- Width := Constraints.MaxWidth;
- lbText.AutoSize := False;
- lbText.Width := Constraints.MaxWidth - lbText.Left - 16;
- lbText.AutoSize := True;
- end
- else begin
- if wide > (Constraints.MinWidth-16) then
- ClientWidth := wide + 8
- else
- Width := Constraints.MinWidth;
- end;
- high := lbText.Height - 85;
- if high > 0 then
- ClientHeight := ClientHeight + high;
- Constraints.MinHeight := Height;
- { Fix buttons top }
- OkButton.Top := ClientHeight-25;
- ActionButton.Top := OkButton.Top;
- { Stick text }
- lbText.AutoSize := False;
- lbText.Height := OkButton.Top - lbText.Top - 4;
- lbText.Anchors := [akLeft,akTop,akRight,akBottom];
- { Personalize }
- FPersonalized := False;
- DoPersonalize;
- { Show window but not activate it }
- SetWindowPos(Handle, HWND_TOPMOST,
- Top, Left, Width, Height,
- SWP_NOACTIVATE);
- ShowWindow(Handle,SW_SHOWNOACTIVATE);
- ShowWindow(OkButton.Handle,SW_SHOWNOACTIVATE);
- ShowWindow(ActionButton.Handle,SW_SHOWNOACTIVATE);
- ShowWindow(ImagePanel.Handle,SW_SHOWNOACTIVATE);
- ShowWindow(Image32.Handle,SW_SHOWNOACTIVATE);
- {
- Show;
- {}
- end;
-
- procedure TfrmNewMessage.Timer1Timer(Sender: TObject);
- begin
- FAlphaCount := FAlphaCount - 1;
- if FAlphaCount < AlphaBlendValue then begin
- AlphaBlendValue := AlphaBlendValue - 2;
- if AlphaBlendValue < 10 then
- OkButton.Click;
- end;
- end;
-
- procedure TfrmNewMessage.FormClose(Sender: TObject;
- var Action: TCloseAction);
- begin
- Action := caFree;
- end;
-
- procedure TfrmNewMessage.FormCreate(Sender: TObject);
- begin
- lbAlpha.Font.Style := lbAlpha.Font.Style + [fsBold];
- Image1.Picture.Assign(Form1.CommonBitmaps.Bitmap[1]);
- end;
-
- procedure TfrmNewMessage.OkButtonClick(Sender: TObject);
- begin
- Timer1.Enabled := False;
- Close;
- end;
-
- procedure TfrmNewMessage.ActionButtonClick(Sender: TObject);
- var
- p: TPoint;
- begin
- with (Sender as TButton) do
- p := ClientToScreen(Point(0,Height));
- PopupMenu1.Popup(p.X,p.Y);
- end;
-
- procedure TfrmNewMessage.PopupMenu1Popup(Sender: TObject);
- begin
- Delete1.Enabled := (msgIndex <> -1) and (msgLocation <> '') and (msgPdu <> '');
- Chat1.Enabled := lbAlpha.Caption <> sUnknownNumber;
- { TODO: check for sUknownContact }
- AddContact1.Enabled := Chat1.Enabled and (Pos('[',lbAlpha.Caption) = 0); // no name included so unknown contact
- end;
-
- procedure TfrmNewMessage.Reply1Click(Sender: TObject);
- begin
- DoMarkMsgAsRead;
- frmMessageContact.Clear;
- Form1.ActionSMSNewMsg.Execute;
- frmMessageContact.AddRecipient(lbAlpha.Caption);
- frmMessageContact.Memo.SetFocus;
- end;
-
- procedure TfrmNewMessage.Forward1Click(Sender: TObject);
- begin
- DoMarkMsgAsRead;
- frmMessageContact.Clear;
- Form1.ActionSMSNewMsg.Execute;
- frmMessageContact.Memo.Text := lbText.Caption;
- frmMessageContact.Memo.SelStart := Length(lbText.Caption);
- end;
-
- procedure TfrmNewMessage.Delete1Click(Sender: TObject);
- begin
- DoMarkMsgAsRead;
- if not msgInInbox and Form1.IsMoveToArchiveEnabled then begin
- { message is already deleted from phone }
- Form1.DelMsgFromFolder(Form1.FNodeMsgArchive,msgPdu);
- OkButton.Click;
- end
- else
- if Form1.DeleteSMS(msgIndex,msgLocation) then begin
- Form1.DelMsgFromFolder(Form1.FNodeMsgInbox,msgPdu);
- OkButton.Click;
- end;
- end;
-
- procedure TfrmNewMessage.AddContact1Click(Sender: TObject);
- begin
- { now lbAlpha.Caption comtains the number only }
- Form1.frmSyncPhonebook.DoEdit(True,lbAlpha.Caption);
- end;
-
- procedure TfrmNewMessage.OnMouseEnter(Sender: TObject);
- begin
- FPrevAlpha := AlphaBlend;
- AlphaBlend := False;
- Timer1.Enabled := False;
- end;
-
- procedure TfrmNewMessage.OnMouseLeave(Sender: TObject);
- begin
- if FPrevAlpha then
- FormDeactivate(nil);
- end;
-
- procedure TfrmNewMessage.FormDeactivate(Sender: TObject);
- begin
- { Was fade out started when we enter ? }
- if FAlphaCount = AlphaBlendValue then begin
- { Yes, fade out faster now }
- Timer1.Interval := 5;
- FAlphaCount := 250;
- AlphaBlendValue := 250;
- end; { No, just continue }
- AlphaBlend := True;
- Timer1.Enabled := True;
- end;
-
- procedure TfrmNewMessage.DoMarkMsgAsRead;
- begin
- { Mark as read }
- if not msgInInbox and Form1.IsMoveToArchiveEnabled then
- Form1.UpdateNewMessagesCounter(Form1.FNodeMsgArchive,msgPdu)
- else
- Form1.UpdateNewMessagesCounter(Form1.FNodeMsgInbox,msgPdu);
- end;
-
- procedure TfrmNewMessage.DoPersonalize;
- var
- contact: PContactData;
- w: WideString;
- s: string;
- begin
- { Try to lookup caller and load personalized info about the contact }
- if not FPersonalized then begin
- FPersonalized := True;
- w := Form1.ExtractContact(lbAlpha.Caption);
- if form1.frmSyncPhonebook.FindContact(w,contact) then begin
- try
- s := GetContactPictureFile(contact);
- if s <> '' then begin
- Image32.Bitmap.LoadFromFile(s);
- IsCustomImage := True;
- ImagePanel.Visible := True;
- end
- else
- IsCustomImage := False;
- except
- IsCustomImage := False;
- end;
- end
- else
- IsCustomImage := False;
- end;
- end;
-
- procedure TfrmNewMessage.Set_CustomImage(const Value: Boolean);
- begin
- FCustomImage := Value;
- if not Value then
- Image32.Bitmap.Assign(Form1.CommonBitmaps.Bitmap[0]);
- end;
-
- procedure TfrmNewMessage.Chat1Click(Sender: TObject);
- var
- Chat: TfrmCharMessage;
- sms: TSMS;
- dt: TDateTime;
- begin
- Chat := Form1.GetChatWindow(Form1.ExtractNumber(lbAlpha.Caption),True);
- Chat.Show;
- Chat.BringToFront;
- Chat.Memo.SetFocus;
- { Start new chat session, add current message as first one }
- sms := TSMS.Create;
- try
- sms.PDU := msgPdu;
- dt := sms.TimeStamp;
- { if not timestamp is not set (i.e. outgoing sms) use current time }
- if dt = 0 then dt := Now;
- Chat.AddChatText(lbAlpha.Caption,lbText.Caption,dt);
- DoMarkMsgAsRead;
- finally
- sms.Free;
- end;
- Close;
- end;
-
- procedure TfrmNewMessage.FormShow(Sender: TObject);
- begin
- SetWindowPos(Handle, HWND_TOPMOST,
- Top, Left, Width, Height,
- SWP_NOACTIVATE);
- end;
-
- end.
-